C语言“贪心法则”

了解下C语言编译,词法分析中的“贪心法则”,有助于避免许多不必要的书写错误。

贪心法则

对于本题 a---b 如何拆解成合法符号的问题,C语言有一个简单的规则,“贪心法则”:每一个符号应该包含尽可能多的字符。

也就是说,编译器将源代码,从左到右,一个字符一个字符地读入,如果加入下一个字符依旧可以构成一个合法符号,则包含该字符,直到不可以为止。

- 和 -- 都是合法运算符,但 --- 不是

例题分析

(1) a---b 的意思是什么?

首先,a是一个合法符号,a-不是,所以第1个符号是a

其次,-是一个合法符号,--也是一个合法符号,但---不是,所以第2个符号是--

然后,-是一个合法符号,-b不是一个合法符号,所以第2个符号是-

最后,只剩下一个字符b,它是一个合法的符号

所以,a---b,依据贪心法则,得出的结果是:a -- - b ,也就是 (a--) - b

(备注:合法的符号,如变量名,只能有大小写字母、数字和_下划线组成,并且不能是数字开头这里的a和b都是变量名。)

	int a =11;
	int b =4;
	cout<a---b<endl;//7
	cout<a<endl;//10

(2) y = x/*p是什么意思呢?

如(1)的分析步骤,前2个符号依次是y , =,本题重点,在x/*p上,依旧贪心法则:

首先, x是一个合法符号, x/则不是;

其次,/是一个合法符号,/*也是一个合法符号,但/*p不是一个合法符号,所以第2个符号是/*, 看到/*后,编译器将把它后续字符均当做是注释扔掉,直到看到*/为止。-_-||

此题的本意是 y = x / (*p),但因为忽略了规则,此书写错误或直接导致编译错误。

本页共26段,888个字符,1939 Byte(字节)